﻿using System;

namespace DimensionsHelper.Common.Metadata.Script;

/// <summary>
///     表达式中的标识符，可以是变量命名、函数名等。
/// </summary>
public class Identifier : Expression
{
    /// <summary>
    ///     表达式中的标识符，可以是变量命名、函数名等。
    /// </summary>
    public Identifier(int start) : base(ExpressionKinds.Identifier, start)
    {
    }

    /// <summary>
    ///     判断给定字符串是否和当前标识符相同。
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public bool IsEqual(string name)
    {
        return Text.Equals(name, StringComparison.OrdinalIgnoreCase);
    }

    /// <summary>
    ///     判断给定字符是否是有效的标识符起始字符。
    /// </summary>
    /// <param name="ch"></param>
    /// <returns></returns>
    public static bool IsValidStartChar(char ch)
    {
        return char.IsLetter(ch)
               || ch == '_'
               || ch == '$'
               || ch == '@'
               || (ch >= 0x4e00 && ch <= 0x9fbb) // 允许汉字命名
            ;
    }


    public override ExpressionBasicType Evaluate()
    {
        return new Categorical(MetadataProvider.FetchFieldValue(Text));
    }


    public override string ToString()
    {
        return Text;
    }
}